/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mp.weixin.WXpublic;

import mp.weixin.WXpublic.receive.RImageEntity;
import mp.weixin.WXpublic.receive.RLinkEntity;
import mp.weixin.WXpublic.receive.RLocationEntity;
import mp.weixin.WXpublic.receive.RShortVideoEntity;
import mp.weixin.WXpublic.receive.RTextEntity;
import mp.weixin.WXpublic.receive.RVideoEntity;
import mp.weixin.WXpublic.receive.RVoiceEntity;
import mp.weixin.WXpublic.receive.event.ClickEventEntity;
import mp.weixin.WXpublic.receive.event.LocationEventEntity;
import mp.weixin.WXpublic.receive.event.ScanEventEntity;
import mp.weixin.WXpublic.receive.event.SubscribeEventEntity;
import mp.weixin.WXpublic.receive.event.TemplateSendJobFinish;
import mp.weixin.WXpublic.receive.event.UnSubscribeEventEntity;
import mp.weixin.WXpublic.receive.event.ViewEventEntity;

/**
 *
 * @author 王仲秋
 */
public interface MessageListener {

    /**
     * 用户发送地理位置信息
     * @param entity 
     * @return  
     */
    public BaseSendMessage location(RLocationEntity entity);

    /**
     * 用户发送文本信息
     * @param rte 
     * @return  
     */
    public BaseSendMessage text(RTextEntity rte);

    /**
     * 用户发送图片
     * @param rie 
     * @return  
     */
    public BaseSendMessage image(RImageEntity rie);

    /**
     * 用户发送语音
     * @param rve 
     * @return  
     */
    public BaseSendMessage voice(RVoiceEntity rve);

    /**
     * 用户发送视频
     * @param rve 
     * @return  
     */
    public BaseSendMessage video(RVideoEntity rve);

    /**
     * 用户发送短视频
     * @param rsve 
     * @return  
     */
    public BaseSendMessage shortVideo(RShortVideoEntity rsve);

    /**
     * 用户发送链接
     * @param rle 
     * @return  
     */
    public BaseSendMessage link(RLinkEntity rle);

    /**
     * 用户关注
     * @param see 
     * @return  
     */
    public BaseSendMessage subscribe(SubscribeEventEntity see);

    /**
     * 用户取消关注
     * @param usee 
     * @return  
     */
    public BaseSendMessage unsubscribe(UnSubscribeEventEntity usee);

    /**
     * 用户扫码
     * @param see 
     * @return  
     */
    public BaseSendMessage scan(ScanEventEntity see);

    /**
     * 用户 自动发送的地理位置信息
     * @param lee 
     * @return  
     */
    public BaseSendMessage location(LocationEventEntity lee);

    /**
     * 点击菜单跳转链接
     * @param vee 
     * @return  
     */
    public BaseSendMessage view(ViewEventEntity vee);

    /**
     * 点击菜单拉取消息
     * @param cee 
     * @return  
     */
    public BaseSendMessage click(ClickEventEntity cee);
    /**
     * 扫码并关注的时候 触发
     * @param see
     * @return 
     */
    public BaseSendMessage scanAndSubscribe(SubscribeEventEntity see);
    
    /**
     * 模板消息接收状态事件 反应用户是否接收 以及接收状态 都会返回到这个事件
     * @param tsjf
     * @return 
     */
    public BaseSendMessage templateSendJobFinish(TemplateSendJobFinish tsjf);
}
